<?php
// +----------------------------------------------------------------------
// | 通用PHP框架 [ ThinkPHP ]
// +----------------------------------------------------------------------
// | 版权所有 2016~2019 郑州智众 [Paulxun@qq.com]
// +----------------------------------------------------------------------
// | 官方网站: https://www.zzmind.com
// +----------------------------------------------------------------------

namespace app\common\listener;

use app\admin\model\Config as ConfigModel;
use app\admin\model\Module as ModuleModel;

/**
 * 初始化配置信息行为
 * 将系统配置信息合并到本地配置
 * @package app\common\listener
 */
class Config
{
    /*
     * @access public
     * @return void
     */
    public function handle($event)
    {
        // 模型检查
		$module = explode('/', request()->pathinfo())[0];
		
        if (!$module) {
            $module = 'index';
        }
        // 获取入口目录
        $base_file = request()->baseFile();
        $base_dir  = substr($base_file, 0, strripos($base_file, '/') + 1);
        define('PUBLIC_PATH', $base_dir);

        // 视图输出字符串内容替换
        $view_replace_str = [
            // 静态资源目录
            '__STATIC__'    => PUBLIC_PATH. 'static',
            // 文件上传目录
            '__UPLOADS__'   => PUBLIC_PATH. 'uploads',
            // JS插件目录
            '__LIBS__'      => PUBLIC_PATH. 'static/libs',
            // 后台CSS目录
            '__ADMIN_CSS__' => PUBLIC_PATH. 'static/admin/css',
            // 后台JS目录
            '__ADMIN_JS__'  => PUBLIC_PATH. 'static/admin/js',
            // 后台IMG目录
            '__ADMIN_IMG__' => PUBLIC_PATH. 'static/admin/img',
            // 前台CSS目录
            '__HOME_CSS__'  => PUBLIC_PATH. 'static/home/css',
            // 前台JS目录
            '__HOME_JS__'   => PUBLIC_PATH. 'static/home/js',
			// 前台模板资源目录
			'__TEM_STATIC__'=> PUBLIC_PATH. 'template/static',
            // 前台IMG目录
            '__HOME_IMG__'  => PUBLIC_PATH. 'static/home/img',
            // 表单项扩展目录
            '__EXTEND_FORM__' => PUBLIC_PATH.'extend/form'
        ];
		$config['tpl_replace_string'] = $view_replace_str;
		$config['public_static_path'] = PUBLIC_PATH. 'static/';
        \think\facade\Config::set($config, 'view');
		unset($config);
		
		// 读取系统配置
		$system_config = cache('system_config');
		if (!$system_config) {
		    $ConfigModel   = new ConfigModel();
		    $system_config = $ConfigModel->getConfig();
		    // 所有模型配置
		    $module_config = ModuleModel::where('config', '<>', '')->column('config', 'name');
		    foreach ($module_config as $module_name => $config) {
		        $system_config[strtolower($module_name).'_config'] = json_decode($config, true);
		    }
		    // 非开发模式，缓存系统配置
		    if ($system_config['develop_mode'] == 0) {
		        cache('system_config', $system_config);
		    }
		}
		
		// 设置配置信息
		\think\facade\Config::set($system_config, 'app');
		// dump(config('app'));
		
        // 如果定义了入口为admin，则修改默认的访问控制器层
        if(defined('ENTRANCE') && ENTRANCE == 'admin') {
            define('ADMIN_FILE', substr($base_file, strripos($base_file, '/') + 1));
            if ($module == 'index') {
                header("Location: ".$base_file.'/admin', true, 302);exit();
            }

            if (!in_array($module, config('module.default_controller_layer'))) {
                // 修改默认访问控制器层
				$route['controller_layer'] = 'admin';
                \think\facade\Config::set($route, 'route');
                // 修改视图模板路径
				$config = [];
				$config['view_path'] = app_path(). $module. '/view/admin/';
				\think\facade\Config::set($config, 'view');
				unset($config);
            }
        } else {
            if ($module == 'admin') {
                header("Location: ".$base_dir.ADMIN_FILE.'/admin', true, 302);exit();
            }
            if (!in_array($module, config('module.default_controller_layer'))) {
                // 修改默认访问控制器层
                $route['controller_layer'] = 'home';
                \think\facade\Config::set($route, 'route');
            }
			if (config('view.web_template') != '') {
			    // 修改视图模板路径
				$config = [];
				$config['view_path'] = root_path(). config('view.web_template'). $module.'/';
				\think\facade\Config::set($config, 'view');
				unset($config);
			}
        }
    }
}
